透過播放音效以及震動給玩家一些回饋吧!
首先我們做到這邊已經約莫 80% 左右了(應該吧 ?), 所以其實也沒有什麼特別能做的,所以我們最後在這邊想為我們的 Shake Soda 加上一點特別的點綴,也就是透過系統音效以及震動回饋來給使用者特殊的感覺。
我們想要播放系統音效時,可以使用 AudioServicesPlayAlertSound
方式來給特定的系統,關於詳細的 SystemSoundID
可以由下列 Github 連結查看:
所以我們想要播放編號 1107
的音效,我們只需要一段程式碼就能夠播放:
AudioServicesPlayAlertSound(1107)
我們想要處理關於播放影音功能時,首先我們需要導入 AVFoundation
這個框架:
import AVFoundation
並且我們宣告一個變數,類型為 AVAudioPlayer
,之後做為我們的播放音樂的播放器:
var audioPlayer: AVAudioPlayer!
假如我們想要播放我們專案內的音訊檔,我們可以使用兩種方式來取得我們檔案的路徑,假這我們今天專案中有一個叫做 Music.mp3 的檔案的話:
// String
let path = Bundle.main.path(forResource: "Music", ofType: "mp3")
// URL
let url = Bundle.main.url(forResource: "Music", withExtension: "mp3")
所以我們設定我們 audioPlayer
的程式碼如下:
func settingAudioPlayer() {
// 取得檔案路徑的 Url
let url = Bundle.main.url(forResource: "Sad music", withExtension: "m4a")!
do {
// 透過檔案的 url 初始化 AVAudioPlayer
audioPlayer = try AVAudioPlayer(contentsOf: url)
// 將 audioPlayer 設為準備播放
audioPlayer.prepareToPlay()
} catch {
print("Error:", error.localizedDescription)
}
}
想要讓手機震動的方式類似於上面播放系統音效的方式一樣,只是這邊我們換成透過 AudioServicesPlaySystemSound
來播放我們的震動的 SystemSoundID
:
// 透過 kSystemSoundID_Vibrate 產生一個震動的 SystemSoundID
let soundID = SystemSoundID(kSystemSoundID_Vibrate)
// 播放震動效果
AudioServicesPlaySystemSound(soundID)
在這個 App 中,我們還加入一個觸碰回饋,觸動回饋的感覺有點類似於比較小的震動,就是 Tableview
在編輯模式下的移動 Cell 時的回饋感,我們會透過 UIImpactFeedbackGenerator
來初始化它:
// 初始化 UIImpactFeedbackGenerator
let generator = UIImpactFeedbackGenerator(style: .heavy)
// 觸發回饋
generator.impactOccurred()
本次教學文的操作可能除了播放音訊其他都需要使用手機測試,各位讀者也可以試著實作看看,體驗一下原生的震動或是觸碰回饋的感覺,未來開發專案的時候也可以添加在其中,給使用者更多的回饋。